package com.wangxue.stock.controller;

import com.sun.deploy.net.HttpResponse;
import com.wangxue.stock.common.domain.InnerMarketDomain;
import com.wangxue.stock.common.domain.Stock4EvrDayDomain;
import com.wangxue.stock.common.domain.Stock4MinuteDomain;
import com.wangxue.stock.common.domain.StockUpDownDomain;
import com.wangxue.stock.pojo.StockBlockRtInfo;
import com.wangxue.stock.pojo.StockBusiness;
import com.wangxue.stock.service.StockService;
import com.wangxue.stock.vo.resp.PageResult;
import com.wangxue.stock.vo.resp.R;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 86198
 * @Date 2022/05/16
 *
 */
@RestController
@RequestMapping("/api/quot")
@CrossOrigin
public class StockController {

    @Autowired
    private StockService stockService;

    /**
     * 获取所有股票信息
     *
     * @return List<StockBusiness>
     * @author wangxue
     * @Date 2022/5/20
     */
    @GetMapping("/stock/business/all")
    public List<StockBusiness> getAllBusiness(){
        return stockService.getAllStockBusiness();
    }

    /**
     * 获取国内最新大盘指数
     *
     * @return * @return R<List<InnerMarketDomain>>
     * @author wangxue
     * @Date 2022/5/20
     */
    @GetMapping("/index/all")
    public R<List<InnerMarketDomain>> innerIndexAll(){
        return this.stockService.innerIndexAll();
    }

    /**
     * 沪深两市版块分时行情数据查询，以交易时间和交易金额降序查询，去前10条数据
     *
     * @return R<List<StockBlockRtInfo>>
     * @author wangxue
     * @Date 2022/5/20
     */
    @GetMapping("/sector/all")
    public R<List<StockBlockRtInfo>> sectorAll(){
        return this.stockService.sectorAllLimit();
    }

    /**
     * 统计沪深两市个股最新交易数据，并按涨幅降序排序查询前10条数据
     * @return R<List<StockUpDownDomain>>
     * @author wangxue
     * @Date 2022/5/24
     */
    @GetMapping("/stock/increase")
    public  R<List<StockUpDownDomain>> stockIncreaseLimit(){
        return stockService.stockIncreaseLimit();
    }

    /**
     * 沪深两市各股行情列表查询，以时间顺序和涨幅分页查询
     ** @param page
     * @param pageSize
     * @return R<PageResult<StockUpDownDomain>>
     * @author wangxue
     * @Date 2022/5/24
     */
    @GetMapping("/stock/all")
    public R<PageResult<StockUpDownDomain>> stockPage(Integer page,Integer pageSize){
        return this.stockService.stockPage(page,pageSize);
    }

    /**
     * 沪深两市涨跌停分时行情数据查询，查询T日每分钟的涨跌停数据（T：当前股票交易日）
     * 		查询每分钟的涨停和跌停的数据的同级；
     * 		如果不在股票的交易日内，那么就统计最近的股票交易下的数据
     * 	 map:
     * 	    upList:涨停数据统计
     * 	    downList:跌停数据统计
     * @return R<Map>
     * @author wangxue
     * @Date 2022/5/24
     */
    @GetMapping("/stock/updown/count")
    public R<Map> upDownCount(){
        return stockService.upDownCount();
    }

    /**
     * 将指定页的股票数据导出到Excel表下
     * @param httpServletResponse
     * @param page 当前页
     * @param pageSize 每页大小
     * @return
     * @author wangxue
     * @Date 2022/5/26
     */
    @GetMapping("/stock/export")
    public void stockExport(HttpServletResponse httpServletResponse, Integer page, Integer pageSize){

        stockService.stockExport(httpServletResponse,page,pageSize);
    }

    /**
     * 统计国内A股大盘T日和T-1日成交量对比功能（成交量为沪市和深市成交量）
     *   map结构示例：
     *      {
     *         "volList": [{"count": 3926392,"time": "202112310930"},......],
     *       "yesVolList":[{"count": 3926392,"time": "202112310930"},......]
     *      }
     * @return * @return R<Map>
     * @author wangxue
     * @Date 2022/5/29
     */
    @GetMapping("/stock/tradevol")
    public R<Map> stockTradeVol4InnerMarket(){
        return stockService.stockTradeVol4InnerMarket();
    }

    /**
     * 查询当前时间下股票的涨跌幅度区间统计功能
     * 如果当前日期不在有效时间内，则以最近的一个股票交易时间作为查询点
     * @return R<Map>
     * @author wangxue
     * @Date 2022/5/30
     */
    @GetMapping("/stock/updown")
    public R<Map> getStockUpDown(){
        return stockService.stockUpDownScopeCount();
    }
    /**
     *查询单个个股的分时行情数据，也就是统计指定股票T日每分钟的交易数据；
     *         如果当前日期不在有效时间内，则以最近的一个股票交易时间作为查询时间点
     * @param code 股票编码
     * @return  R<List<Stock4MinuteDomain>>
     * @author wangxue
     * @Date 2022/5/31
     */
    @GetMapping("/stock/screen/time-sharing")
    public R<List<Stock4MinuteDomain>> stockScreenTimeSharing(String code){
        return stockService.stockScreenTimeSharing(code);
    }
    /**
     * 单个个股日K 数据查询 ，可以根据时间区间查询数日的K线数据
     ** @param StockCode 股票编码
     * @return  R<List<Stock4EvrDayDomain>>
     * @author wangxue
     * @Date 2022/5/31
     */
    @GetMapping("/stock/screen/dkline")
    public R<List<Stock4EvrDayDomain>> getDayLinData(@RequestParam("code") String StockCode){
        return stockService.stockCreenDkLine(StockCode);
    }
}
